package Demo;

import java.util.Scanner;

public class Demo03 {
    public static void main(String[] args) {

        /**
         * 数组查询：二分查找法（折中查找法）
         * 二分查找法比线性查找法的优点：效率更高；
         * 二分查找法的前提条件：数据是有序的，从小到大排序，无序的没法使用二分查找法
         *
         * 流程：第一步：定义起始、终点索引坐标 min = 0   max = arr.length-1
         * 第二步：因为不知道循环次数 使用while循环
         * 第三步：while布尔表达式应为 min <= max 当min大于max时代表结束
         * 第四步：定义 折中位索引 mid = （min + max）/2
         * 第五步：判断 mid 与 查询值的 关系  有三种关系  等于 大于 下于
         若等于 直接输出  若大于 向左找 max需重新赋值  max = mid - 1;
         若小于 向右找 min需重新赋值 min = mid + 1 ;
         * */

        int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13} ;

        Scanner s = new Scanner(System.in);
        System.out.print("请输入1~13之间的数：");
        int num = s.nextInt();

        //设置开关
        boolean isFlag = true;
        //先设置折中的起始和终点索引坐标
        int min = 0;
        int max = arr.length - 1;

        //因为不知道循环次数所以用while
        //布尔表达式为 min <= max 要是大于循环就结束了

        while( min <= max){
            int mid = (min + max)/2;
            if(arr[mid] == num){
                isFlag = false;
                System.out.println("找到了您输入的数字" + arr[mid]);
                break;
            }else if(arr[mid] > num){
                max = mid - 1;
            }else if( arr[mid] < num){
                min = mid + 1;
            }
        }

        if(isFlag)
            System.out.println("没找到您输入的数据");
    }
}
